using Plots
# Crtanje parametarskih krivih
#Crtanje parametarskih krivih može se obaviti na veoma jednostavan način - kako je x = x(t), y = y(t) u 2D prostoru
#odnosno x = x(t), y = y(t), z = z(t) u 3D prostoru, to je dovoljno proslediti vektor parametara t za obe koordinate
#i plot funkciji proslediti odgovarajuće koordinate kao argumente i vrednosti funkcije
t = range(-π, π, length = 1000); #prva vrednost koju prosleđujemoje poč. vr. parametra t, druga vrednost
#predstavlja njegovu krajnju vrednost, a trećiu argument predstavlja dužinu niza tj. u koliko
#ekvidistantnih tačaka vršimo deljenje ovog intervala
plot(2*sin.(t), cos.(t), title = "Elipsa", lw = 3)
#Sada ćemo prikazati kako se crta 3D plot krive:
t = range(-4*π, 4*π, length = 1000);
plot(2*sin.(t), cos.(t), t,title = "Spirala", lw = 3) #prve dva niza su x i y koordinata, a treći je z koordinata
#Sada ćemo dati prikaz kako se vrši iscrtavanje površi - za to su nam potrebna dve promenljive x i y, i treća, y z
#koordinata
#Za to će nam biti potrebna funkcija surface(), koja se nalazi u paketu PyPlot, koji ćemo sad instalirati:
u = range(-5, 5, length = 1000);
v = range(-5, 5, length = 1000);
f(x, y) = x.^2 + y.^2; #moramo napraviti generičku funkciju
surface(u, v, f, title = "Parabola" )
# Što se tiče plotovanja, postoji i mogućnost plotovanja tzv. heatmap-a - to je svojevrsna vrsta grafika koja
# funkciju sa dva argumenta ne iscrtava, već daje u ravni prikaz njenih intenziteta u odnovarajućim tačkama
#Boje su tačno uparene sa vrednostima na skali, a na skali su date intenziteti vrednosti funkcije
# koje funkcija uzima u ovom opsegu
heatmap(u, v, f, c = :thermal)
#Naravno, moguće je zadavati i druge opcije za iscrtavanje itenziteta nasih funkcija u pogledu boja
heatmap(u, v, f, c = :cool)
#heatmap moguće je i koristiti za prikaz višedimenzionih funkcija - tada se funkcije izdvajaju po vrstama!
x = randn(10, 1000);
heatmap(x)
y = rand(10, 1000);
heatmap(y)
#heatmap-e se takođe koriste i u prikazivanju statističkih parametara (npr. koeficijenata korelacije)
using Statistics
y1 = randn(1,1000);
y2 = randn(1,1000);
y3 = randn(1,1000);
y4 = randn(1,1000);
y5 = randn(1,1000);
y = [y1; y2; y3; y4; y5]';
R = cor(y); #Racunanje kovarijacione matrice
heatmap(R)
#Za kraj, daćemo prikaz plotovanja funkcija sa već predefinisanim, specijalizovanim setovima boja za plotovanje (od
#naučnih do raznoraznih)
plot([x -> (2*x - a) for a in range(1, 5, length = 5)], 0, 5;palette = :ocean) #gnuplot
plot([x -> (2*x - a) for a in range(1, 5, length = 5)], 0, 5;palette = :deep) #matplotlib
plot([x -> (2*x - a) for a in range(1, 5, length = 5)], 0, 5;palette = :vik) #scientific